package database

import (
	"fmt"
	"ginx/config"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
)

func Init() (*gorm.DB, error) {
	// 定义数据库连接字符串
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		config.Config.Database.User,
		config.Config.Database.Password,
		config.Config.Database.Host,
		config.Config.Database.Port,
		config.Config.Database.Name,
	)

	// 使用GORM库打开数据库连接
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		// 设置日志模式为Info
		Logger: logger.Default.LogMode(logger.Info),
		// 设置表命名策略为单数形式
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true,
		},
	})

	// 检查数据库连接是否成功
	if err != nil {
		// 如果连接失败，抛出异常
		panic(fmt.Sprintf("数据库连接失败: %v", err))
	}

	// 获取底层数据库连接
	sqlDB, _ := db.DB()

	// 设置最大空闲连接数为10
	sqlDB.SetMaxIdleConns(10)

	// 设置最大打开连接数为100
	sqlDB.SetMaxOpenConns(100)

	return db, err
}
